package cn.zwk.drawing.domain.configuration.model;

import lombok.Data;
import lombok.Builder;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * 系统配置领域实体
 */
@Data
@Builder
public class SystemConfiguration {
    
    /**
     * 配置ID
     */
    private String configId;
    
    /**
     * 配置名称
     */
    private String name;
    
    /**
     * 配置类型
     */
    private ConfigurationType type;
    
    /**
     * 配置内容
     */
    private Map<String, Object> content;
    
    /**
     * 配置版本
     */
    private String version;
    
    /**
     * 是否启用
     */
    private Boolean enabled;
    
    /**
     * 环境标识
     */
    private String environment;
    
    /**
     * 创建时间
     */
    private LocalDateTime createdAt;
    
    /**
     * 最后修改时间
     */
    private LocalDateTime lastModified;
    
    /**
     * 配置类型枚举
     */
    public enum ConfigurationType {
        DIAGRAM("diagram", "图表配置"),
        CAPABILITY("capability", "能力配置"),
        THEME("theme", "主题配置"),
        SECURITY("security", "安全配置"),
        PERFORMANCE("performance", "性能配置");
        
        private final String code;
        private final String description;
        
        ConfigurationType(String code, String description) {
            this.code = code;
            this.description = description;
        }
        
        public String getCode() { return code; }
        public String getDescription() { return description; }
    }
    
    /**
     * 获取配置值
     */
    public Object getConfigValue(String key) {
        return content != null ? content.get(key) : null;
    }
    
    /**
     * 获取字符串配置值
     */
    public String getStringValue(String key, String defaultValue) {
        Object value = getConfigValue(key);
        return value != null ? value.toString() : defaultValue;
    }
    
    /**
     * 获取整数配置值
     */
    public Integer getIntValue(String key, Integer defaultValue) {
        Object value = getConfigValue(key);
        if (value instanceof Number) {
            return ((Number) value).intValue();
        }
        return defaultValue;
    }
    
    /**
     * 获取布尔配置值
     */
    public Boolean getBooleanValue(String key, Boolean defaultValue) {
        Object value = getConfigValue(key);
        if (value instanceof Boolean) {
            return (Boolean) value;
        }
        return defaultValue;
    }
}